perm filename SAVKDS[KID,KMC] blob sn#122894 filedate 1974-11-15 generic text, type T, neo UTF8
TITLE SAVKDS	;SAVE SOME FILES FROM THE UDP.
;THIS PROGRAM COPIES A FILE FROM THE UDP TO DISK GIVING IT
; A DMD EXTENSION. THE NAME OF THE FILE IS READ FROM THE TTY.


FILNAM:	0		;FILE NAME TO BE COPIED.
	SIXBIT	/DMD/
	0
	0

INCMD:	0
BLKNO:	0
	0

FILTH:	0

OUTCMD:	0
	0
	0

UDPCHN	←17
DSKCHN	←16
PAKST	←←1

A←1
B←2
C←3
P←7

START:	;FIRST INIT THE UDP
	INIT	UDPCHN,17	;DUMP MODE APPROPRIATE
	SIXBIT	/UDP/
	0
	JRST	[OUTSTR [ASCIZ /CANNOT INIT UDP/]
		CALL [SIXBIT /EXIT/]		];CAN'T CONTINUE
	ENTER	UDPCHN,[SIXBIT /KMC/
		0
		0
		0]
	JRST	[OUTSTR [ASCIZ /CURRENT PAK PROTECTED/]
		CALL [SIXBIT /EXIT/]]


	;NOW INIT THE DISK
	INIT	DSKCHN,17	;DUMP MODE APPROPRIATE
	SIXBIT	/DSK/
	0
	JRST	[OUTSTR [ASCIZ /CANNOT INIT DISK/]
		CALL [SIXBIT /EXIT/]];


	;NOW READ THE FILE NAME
	MOVEI	A,=30
	MOVEI	B,0
FNCHL:	INCHRW	C
        ANDI	C,177
	SUBI	C,40
	JUMPLE	C,FNCHX
	LSH	C,0(A)
	IOR	B,C
	SUBI	A,6
	JUMPGE	A,FNCHL
FNCHX:	MOVEM	B,FILNAM


	;NOW ENTER THE FILE NAME
	ENTER	DSKCHN,FILNAM
	JRST	[OUTSTR [ASCIZ /CANNOT ENTER THE FILE/]
		CALL [SIXBIT /EXIT/]]


	;NOW READ UDP DIRECTORY
	IN	UDPCHN,[IOWD =2336,DIRECT
			PAKST]
	JRST	.+2
	JRST	[OUTSTR [ASCIZ /ERROR ON UDP DIR READ/]
		CALL [SIXBIT /EXIT/]]

	;CHECK THAT WORD 0 OF DIRECTORY IS REASONABLE.
	MOVE	A,DIRECT
	JUMPL	A,[OUTSTR [ASCIZ /NEGATIVE NO. OF UDP ENTRIES/]
		CALL [SIXBIT /EXIT/]]
	CAILE	A,=1164		;ONLY 1164 ENTRIES POSSIBLE
	JRST	[OUTSTR [ASCIZ /TOO MANY UDP ENTRIES/]
		CALL [SIXBIT /EXIT/]]


	MOVEI	B,DIRECT+2
	MOVE	A,DIRECT
	LSH	A,1
	ADD	A,B
FIND1:	CAMN	A,B
	JRST	FINDF
	MOVE	C,FILNAM
	CAMN	C,0(A)
	JRST	FINDX
	SUBI	A,2
	JRST	FIND1

FINDF:	;FILE NOT FOUND
	OUTSTR	[ASCIZ /FILE NOT FOUND/]
	CALL 	[SIXBIT /EXIT/]


FINDX:	;APPROPRIATE ENTRY IN DIRECTORY FOUND
	HLR	B,1(A)		;FILE LENGTH
	MOVEM	B,FILTH
	ADDI	B,200
	MOVEM	B,FOO		;WORD COUNT IN DISK FILE
	HRRZ	B,1(A)		;STARTING BLOCK NUMBER
	MOVEM	B,BLKNO


	;NOW WRITE 1ST 200 WORDS OF DISK FILE
	OUTPUT	DSKCHN,[IOWD 200,FOO
			0]


	;NOW WRITE THE SOUND
	MOVN	A,FILTH		;WORDS TO BE COPIED
	LSH	A,=18		;NEG OF WORD COUNT
	HRRI	A,FOO-1		;IOWD CONSTRUCTED
	MOVEM	A,INCMD
	MOVEM	A,OUTCMD

	INPUT	UDPCHN,INCMD
	OUTPUT	DSKCHN,OUTCMD


	;NOW CLOSE THE FILE
	RELEAS	DSKCHN,
	RELEAS	UDPCHN,
	OUTSTR	[ASCIZ /FILE WRITTEN/]
	CALL	[SIXBIT /EXIT/]


FOO:	BLOCK	=60000
DIRECT:	BLOCK	=3000


END	START